SORACOM Funnelで、AWSアクセスキーを利用せずにデータをIoT Coreに送信する
SORACOM Funnelを利用すれば、SORACOM SIMを利用するデバイスからのデータを簡単にAWSに転送できます。 このSORACOM Funnelですが、いままで、AWSアクセスキーを利用していましたが、「AWSアクセスキーを利用せず、IAMロールだけで実現できるのでは……?」と気づいたので、試してみました。
おすすめの方
- SORACOM FunnelでAWSアクセスキーを利用したくない方
- SORACOM FunnelをIAMロールで利用したい方
- SORACOM Funnel用のIAMロールをCloudFormationで作成したい方
前提
SORACOM Funnel用のIAMロールを作成する
CloudFormationテンプレート
ExternalIdは、UUIDなど推測されにくいランダムな文字列にすることをおすすめします。
AWSTemplateFormatVersion: 2010-09-09 Description: IAM Role for SORACOM Funnel Parameters: SoracomPrincipalAwsAccountId: Type: String Default: "762707677580" # 日本カバレッジ:762707677580, グローバルカバレッジ:950858143650 SoracomExternalId: Type: String Resources: SoracomFunnelRole: Type: AWS::IAM::Role Properties: RoleName: soracom-funnel-role AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: sts:AssumeRole Principal: AWS: - !Ref SoracomPrincipalAwsAccountId Condition: StringEquals: sts:ExternalId: !Ref SoracomExternalId Policies: - PolicyName: soracom-funnel-role-policy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: iot:Publish Resource: !Sub "arn:aws:iot:${AWS::Region}:${AWS::AccountId}:topic/soracom/gps-multiunit/*" Outputs: SoracomFunnelRoleArn: Value: !GetAtt SoracomFunnelRole.Arn
デプロイ
aws cloudformation deploy \ --template-file iam.yml \ --stack-name SORACOM-Funnel-IAM-Role-Stack \ --capabilities CAPABILITY_NAMED_IAM \ --no-fail-on-empty-changeset
作成したIAMロールのARNを取得する
aws cloudformation describe-stacks \ --stack-name SORACOM-Funnel-IAM-Role-Stack \ --query 'Stacks[].Outputs' [ [ { "OutputKey": "SoracomFunnelRoleArn", "OutputValue": "arn:aws:iam::123456789012:role/soracom-funnel-role" } ] ]
SORACOM Funnelを設定してAWS IoT Coreにデータ送信する
SORACOMにIAMロールの情報を登録する
SORACOM Webコンソールにアクセスし、右上のメニューにある「セキュリティ」を選択します。
続いて、「認証情報ストア」にある「認証情報を登録」を選択します。
種別は「AWS IAMロール認証情報」を選択し、適当な「認証情報ID」を入力し、さきほどの「IAMロールのARN」と「外部ID」を入力します。
最後に「登録」を押して完了です。
AWS IoT Coreエンドポイント取得
下記コマンドで取得できます。
aws iot describe-endpoint \ --endpoint-type iot:Data-ATS
SORACOM Funnelを設定する
メニューの「SIMグループ」からデバイス(GPSマルチユニット)が所属しているSIMグループを選択します。
SORACOM Funnelを設定し、保存します。
項目 | 内容 |
---|---|
転送先サービス | AWS IoT |
転送先URL | xxxxx.iot.ap-northeast-1.amazonaws.com/soracom/gps-multiunit/#{imsi} |
認証情報 | さきほど登録した認証情報 |
送信データ形式 | JSON |
AWS IoT Coreでデータ受信を確認する
IoT Coreの「MQTT テストクライアント」にアクセスして、次のトピックをサブスクライブします。
- soracom/gps-multiunit/+
しばらく待つと、データが表示されました。
さきほどSORACOM認証情報ストアに登録した認証情報IDがcredentialsId
に設定されています。バッチリですね。
SORACOM 認証情報ストアの「最終使用日時」を確認する
利用日時が更新されていました。
さいごに
SORACOM Funnelで、AWSアクセスキーを利用せずにデータをIoT Coreで受け取ってみました。 いままでAWSアクセスキーを利用しており、AWSアクセスキーのローテーションが手間でしたが、この仕組みを使えばAWSアクセスキー自体が不要になりますね。